package ec.edu.ucacue.siop.dao.recurso;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import ec.edu.ucacue.siop.dao.GenericDAOImpl;
import ec.edu.ucacue.siop.modelo.bases.UnidadMedida;
import ec.edu.ucacue.siop.modelo.recurso.UnidadFuncional;
import ec.edu.ucacue.siop.modelo.recurso.VariableProceso;
import ec.edu.ucacue.siop.modelo.recurso.VariableProcesoAsociada;

public class VariableProcesoDAOImpl extends GenericDAOImpl<VariableProceso, Serializable> implements VariableProcesoDAO{

	public VariableProceso create(String nombre, UnidadMedida um,
			UnidadFuncional unidad, boolean medida, String fuenteDato,
			List<VariableProceso> listaVar) {
		VariableProceso var = new VariableProceso();
		var.setNombre(nombre);
		var.setUnidadFuncional(unidad);
		var.setUnidadMedida(um);
		var.setMedida(medida);
		var.setFuenteDato(fuenteDato);
		if(listaVar!=null) {
			var.setListaVarAsociada(new ArrayList<VariableProcesoAsociada>());
			for(int i=0; i<listaVar.size();i++) {
				VariableProcesoAsociada varAso = new VariableProcesoAsociada();
				varAso.setVariableComponente(listaVar.get(i));
				varAso.setVarPrincipal(var);
				var.getListaVarAsociada().add(varAso);
			}
		}
		unidad.getListaVarProceso().add(var);
		return var;
	}

	public VariableProceso encontrarEspecifica(String nomVar,
			String unidad) {
		Session hibernateSession = this.getSession();
		 Query q= hibernateSession.createQuery("From UnidadFuncional where nombre like :unidad");
		 q.setParameter("unidad", unidad);
		 if(q.list().size() != 1){

			 return null;
		 }
		 UnidadFuncional uf = (UnidadFuncional) q.list().get(0);
		 q = hibernateSession.createQuery("From VariableProceso where nombre like :nomVar and unidadFuncional = :uf" );
		 q.setParameter("nomVar", nomVar);
		 q.setParameter("uf", uf);
		 if(q.list().size()!=1) {
			 return null;
		 }
		 return (VariableProceso) q.list().get(0);
	}
}
